package demo1;

import java.util.Stack;

//最小栈
//设计一个支持 push ，pop ，top 操作，并能在常数时间内检索到最小元素的栈。
//实现 MinStack 类:
//MinStack() 初始化堆栈对象。
//void push(int val) 将元素val推入堆栈。
//void pop() 删除堆栈顶部的元素。
//int top() 获取堆栈顶部的元素。
//int getMin() 获取堆栈中的最小元素。
class MinStack{
//    Stack<Integer> stack = new Stack<>();
    public int val;
    Stack<Integer> stack;
    Stack<Integer> minStack;
    //MinStack() 初始化堆栈对象。
    public MinStack() {
//        this.val = val;
        stack = new Stack<>();
        minStack = new Stack<>();
    }
    //将元素val推入堆栈。
    public void push(int val){
        stack.push(val);
        if (minStack.empty() || minStack.peek()>=val){
            minStack.push(val);
        }
    }
    //删除堆栈顶部的元素。
    public void pop(){
        if (stack.empty()){
            return;
        }
        int val = stack.pop();
        if (val == minStack.peek()){
            minStack.pop();
        }
    }
    //获取堆栈顶部的元素。
    public int top(){
        if (stack.empty()){
            return -1;
        }
        return stack.peek();
    }
    //获取堆栈中的最小元素。
    public int getMin(){
        return minStack.peek();
    }

}
public class Test1 {
    public static void main(String[] args) {
        MinStack minStack = new MinStack();
        minStack.push(12);
        minStack.push(7);
        minStack.push(9);
        minStack.push(6);
        minStack.push(4);
        System.out.println(minStack.getMin());
        minStack.pop();
        System.out.println(minStack.top());
    }
}
